package cn.modular02.work01;

/**
 * 1.定义一个长度为[16][16]的整型二维数组并输入所有位置的元素值，分别实现二维数组中所有行和所有列中所有元素的累加和并打印。
 * 2.再分别实现二维数组中左上角到右下角 和 右上角到左下角所有元素的累加和并打印。
 *
 * @author 陈洛健
 * @date 2020/7/21 21:46
 * @description
 */
public class Work01 {
    /**
     * 打印每行的和
     *
     * @param arr
     * @return
     */
    public static void printArrayLine(int[][] arr) {

        for (int i = 0; i < arr.length; i++) {
            int count = 0;
            for (int j = 0; j < arr[i].length; j++) {
                count += arr[i][j];
            }
            System.out.println("第"+(i+1)+"行的和是："+count);
        }


    }

    /**
     * 打印每列的和
     *
     * @param arr 调用的二维数组
     * @return 和
     */
    public static void printArrayColumn(int[][] arr) {

        int j = 0, k = 0;
        for (j = 0; j < arr[0].length; j++) {
            int count = 0;
            for (int i = 0; i < arr.length; i++) {
                count += arr[i][j];
            }
            System.out.println("第"+(j+1)+"列的和是："+count);
        }
    }

    /**
     * 打印二维数组中，左上角到右下角的和
     *
     * @return
     */
    public static void  printLeftTopToLowerRightCount(int[][] arr) {
        int count = 0;

        int i = 0, j = 0;
        while (i < arr.length && j < arr[i].length) {
            count += arr[i][j];
            i++;
            j++;
        }
        System.out.println("左上角到右下角的和为："+count);
    }

    /**
     * 打印二维数组右上角到左下角的所有元素的和
     *
     * @param arr 调用的二维数组
     * @return 和
     */
    public static void printRightTopToLowerLeft(int[][] arr) {
        int count = 0;
        int i = arr.length - 1, j = arr[i].length - 1;

        while (i >= 0 && j >= 0) {
            count += arr[i][j];
            i--;
            j--;
        }
        System.out.println("右上角到左下角的和为："+count);
    }

    public static void main(String[] args) {
        //定义数组
        int[][] arr = new int[16][16];
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                arr[i][j] = j;
            }
        }
        //打印每行的和
        printArrayLine(arr);
        //打印每列的和
        printArrayColumn(arr);
        //打印二维数组右上角到左下角的所有元素的和
        printRightTopToLowerLeft(arr);
        //打印左上角到右下角的所有元素的和
        printLeftTopToLowerRightCount(arr);
    }

}
